package me.mingshan.leetcode;

/**
 * https://leetcode.cn/problems/faulty-keyboard/
 *
 *
 * 你的笔记本键盘存在故障，每当你在上面输入字符 'i' 时，它会反转你所写的字符串。而输入其他字符则可以正常工作。
 *
 * 给你一个下标从 0 开始的字符串 s ，请你用故障键盘依次输入每个字符。
 *
 * 返回最终笔记本屏幕上输出的字符串。
 *
 *
 *
 * 示例 1：
 *
 * 输入：s = "string"
 * 输出："rtsng"
 * 解释：
 * 输入第 1 个字符后，屏幕上的文本是："s" 。
 * 输入第 2 个字符后，屏幕上的文本是："st" 。
 * 输入第 3 个字符后，屏幕上的文本是："str" 。
 * 因为第 4 个字符是 'i' ，屏幕上的文本被反转，变成 "rts" 。
 * 输入第 5 个字符后，屏幕上的文本是："rtsn" 。
 * 输入第 6 个字符后，屏幕上的文本是： "rtsng" 。
 * 因此，返回 "rtsng" 。
 *
 * @author hanjuntao
 * @date 2025/6/10 0010
 */
public class L_2810_faulty_keyboard {

    public static void main(String[] args) {
        String s = "string";
        System.out.println(finalString(s));
    }

    public static String finalString(String s) {
        char[] charArray = s.toCharArray();

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] == 'i') {
                char[] temp = sb.toString().toCharArray();
                reverse(temp);
                sb = new StringBuilder(new String(temp));
            } else {
                sb.append(charArray[i]);
            }
        }

        return sb.toString();
    }

    private static void reverse(char[] charArray) {
        int left = 0;
        int right = charArray.length - 1;

        while (left < right) {
            char temp = charArray[left];
            charArray[left] = charArray[right];
            charArray[right] = temp;

            left++;
            right--;
        }
    }
}
